For the OSD, all parameters except for the icon are optional - if the
caller doesn't include the 'label' option, the OSD won't show a label
etc.
While this makes sense for an API, it means that we have to be careful
to correctly differentiate an option that was omitted and an option
that has a 'falsy' value like false or 0.
Unfortunately since commit
ccaae5d3c we no longer do, with the result
that OSDs meant for the first monitor will show up on all, and a level
of 0 is presented as no level bar instead of an empty one, whoops.
https://bugzilla.gnome.org/show_bug.cgi?id=791669
for (let param in params)
params[param] = params[param].deep_unpack();
- let monitorIndex = params['monitor'] || -1;
- let label = params['label'] || undefined;
- let level = params['level'] || undefined;
- let maxLevel = params['max_level'] || undefined;
+ let { monitor: monitorIndex,
+ label,
+ level,
+ max_level: maxLevel,
+ icon: serializedIcon } = params;
+
+ if (monitorIndex === undefined)
+ monitorIndex = -1;
let icon = null;
- if (params['icon'])
- icon = Gio.Icon.new_for_string(params['icon']);
+ if (serializedIcon)
+ icon = Gio.Icon.new_for_string(serializedIcon);
Main.osdWindowManager.show(monitorIndex, icon, label, level, maxLevel);
},